const PermissionModel = require('../models/permissionModel');

const permissionController = {
    // 创建权限
    async create(req, res) {
        try {
            const { role, name, permission, description } = req.body;

            if (!role || !name) {
                return res.status(400).json({ msg: 'role 和 name 为必填项' });
            }

            // 检查 role 是否重复
            if (await PermissionModel.existsActiveRole(role)) {
                return res.status(400).json({ msg: `role=${role} 已存在，请勿重复创建` });
            }

            // 检查 name 是否重复
            if (await PermissionModel.existsActiveName(name)) {
                return res.status(400).json({ msg: `name=${name} 已存在，请勿重复创建` });
            }

            const id = await PermissionModel.createPermission({
                role,
                name,
                permission,
                description
            });

            res.json({ msg: '创建成功', id });

        } catch (error) {
            console.error(error);
            res.status(500).json({ msg: '服务器错误', error });
        }
    },

    async getAll(req, res) {
        try {
            const data = await PermissionModel.getAllPermissions();
            res.status(200).json(data);
        } catch (err) {
            console.error(err);
            res.status(500).json({ msg: '服务器错误' });
        }
    },

    async getById(req, res) {
        try {
            const id = req.params.id;
            const data = await PermissionModel.getPermissionById(id);
            if (!data) return res.status(404).json({ msg: '未找到该权限记录' });
            res.status(200).json(data);
        } catch (err) {
            console.error(err);
            res.status(500).json({ msg: '服务器错误' });
        }
    },

    // 更新权限
    async update(req, res) {
        try {
            const id = req.params.id;
            const updates = req.body;

            const permission = await PermissionModel.getPermissionById(id);
            if (!permission) {
                return res.status(404).json({ msg: '记录不存在' });
            }

            // role 修改后是否重复
            if (updates.role !== undefined) {
                const exists = await PermissionModel.existsActiveRole(updates.role, id);
                if (exists) {
                    return res.status(400).json({ msg: `role=${updates.role} 已存在，无法更新` });
                }
            }

            // name 修改后是否重复
            if (updates.name !== undefined) {
                const exists = await PermissionModel.existsActiveName(updates.name, id);
                if (exists) {
                    return res.status(400).json({ msg: `name=${updates.name} 已存在，无法更新` });
                }
            }

            const success = await PermissionModel.updatePermission(id, updates);

            if (!success) {
                return res.status(400).json({ msg: '更新失败' });
            }

            res.json({ msg: '更新成功' });

        } catch (error) {
            console.error(error);
            res.status(500).json({ msg: '服务器错误', error });
        }
    },

    async delete(req, res) {
        try {
            const id = req.params.id;
            const success = await PermissionModel.deletePermission(id);
            if (!success) return res.status(404).json({ msg: '删除失败或记录不存在' });
            res.status(200).json({ msg: '删除成功' });
        } catch (err) {
            console.error(err);
            res.status(500).json({ msg: '服务器错误' });
        }
    }
};

module.exports = permissionController;
